typedef struct pqueue *pqueue;
pqueue allocate_pqueue(heap h, boolean(*)(void *, void *));
void deallocate_pqueue(pqueue q);
void pqueue_insert(pqueue q, void *v);
boolean pqueue_remove(pqueue q, void *v);
void pqueue_remove_at(pqueue q, u32 index);
void *pqueue_peek(pqueue q);
void *pqueue_peek_at(pqueue q, u32 index);
void *pqueue_pop(pqueue q);
u64 pqueue_length(pqueue q);
void pqueue_reorder(pqueue q);
closure_type(pqueue_element_handler, boolean, void *elem);
boolean pqueue_walk(pqueue q, pqueue_element_handler h);
